/*
 *  Copyright 2005 The Apache Software Foundation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.mybatis.generator.config;

import java.util.List;

import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.internal.util.StringUtility;
import org.mybatis.generator.internal.util.messages.Messages;

/**
 * @author Jeff Butler
 */
public class JavaClientGeneratorConfiguration extends TypedPropertyHolder {
    private String targetPackage;
    private String implementationPackage;
    private String targetProject;
    // idong
    private String superClass;
    // idong
    private String nameSpace;

    /**
     *  
     */
    public JavaClientGeneratorConfiguration() {
	super();
    }

    public String getTargetProject() {
	return targetProject;
    }

    public void setTargetProject(String targetProject) {
	this.targetProject = targetProject;
    }

    public String getTargetPackage() {
	return targetPackage;
    }

    public void setTargetPackage(String targetPackage) {
	this.targetPackage = targetPackage;
    }

    public XmlElement toXmlElement() {
	XmlElement answer = new XmlElement("javaClientGenerator"); //$NON-NLS-1$
	if (getConfigurationType() != null) {
	    answer.addAttribute(new Attribute("type", getConfigurationType())); //$NON-NLS-1$
	}

	if (targetPackage != null) {
	    answer.addAttribute(new Attribute("targetPackage", targetPackage)); //$NON-NLS-1$
	}

	if (targetProject != null) {
	    answer.addAttribute(new Attribute("targetProject", targetProject)); //$NON-NLS-1$
	}

	if (implementationPackage != null) {
	    answer.addAttribute(new Attribute("implementationPackage", targetProject)); //$NON-NLS-1$
	}
	// idong
	if (superClass != null) {
	    answer.addAttribute(new Attribute("superClass", superClass)); //$NON-NLS-1$
	}
	// idong
	if (nameSpace != null) {
	    answer.addAttribute(new Attribute("nameSpace", nameSpace)); //$NON-NLS-1$
	}
	addPropertyXmlElements(answer);

	return answer;
    }

    public String getImplementationPackage() {
	return implementationPackage;
    }

    public void setImplementationPackage(String implementationPackage) {
	this.implementationPackage = implementationPackage;
    }

    // idong
    public String getSuperClass() {
	return superClass;
    }

    // idong
    public void setSuperClass(String superClass) {
	this.superClass = superClass;
    }

    // idong
    public String getNameSpace() {
	return nameSpace;
    }

    // idong
    public void setNameSpace(String nameSpace) {
	this.nameSpace = nameSpace;
    }

    public void validate(List<String> errors, String contextId) {
	if (!StringUtility.stringHasValue(targetProject)) {
	    errors.add(Messages.getString("ValidationError.2", contextId)); //$NON-NLS-1$
	}

	if (!StringUtility.stringHasValue(targetPackage)) {
	    errors.add(Messages.getString("ValidationError.12", //$NON-NLS-1$
		    "javaClientGenerator", contextId)); //$NON-NLS-1$
	}

	if (!StringUtility.stringHasValue(getConfigurationType())) {
	    errors.add(Messages.getString("ValidationError.20", //$NON-NLS-1$
		    contextId));
	}
    }
}
